package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.DeviceMediaGateForCompatibilityDTO;
import com.itlong.cloud.POJO.DTO.property.DeviceMediaRemoveGateBindAddressDTO;
import com.itlong.cloud.POJO.PO.DeviceMediaGatePO;
import com.itlong.cloud.POJO.VO.property.DeviceMediaBindAddressVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *   门口机多媒体服务设备信息持久层对象
 * </desc>
 *
 * @createDate 2017/9/21
 */
@Mapper
@Repository
public interface IDeviceMediaGateDao extends IAbstractBaseDao<DeviceMediaGatePO> {
    /**
     * <desc>
     *    保存单个门口机多媒体服务设备信息
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      批量保存门口机-服务地址信息
     * </desc>
     *
     * @param params 待保存的门口机-服务地址信息
     * @return 受影响的行数
     * @author LouisLewis
     * @createDate 2017-11- 20
     */
    Integer batchSave(List<Map<String, Object>> params);

    /**
     * <desc>
     *      批量保存一体式人脸识别门禁
     * </desc>
     *
     * @param params 待保存的门口机-服务地址信息
     * @return 受影响的行数
     * @author Qiang.S
     * @createDate 2020-06-01
     */
    Integer batchSaveEntrance(List<Map<String, Object>> params);

    /**
     * <desc>
     *      修改单个门口机多媒体服务设备信息【根据多媒体Id（mediaId）】
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer update(Map<String,Object> params);



    /**
     * <desc>
     *      批量更新门口机-服务地址信息
     * </desc>
     *
     * @param params 待更新的门口机-服务地址信息
     * @return 受影响的行数
     * @author LouisLewis
     * @createDate 2017-11-21
     */
    Integer batchUpdate(List<Map<String, Object>> params);

    /**
     * <desc>
     *    逻辑删除指定门口机多媒体服务信息【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-23
     */
    Integer removeOne(@Param("mediaId")String mediaId);


    /**
     * <desc>
     *    查询指定的门口机多媒体资源绑定的地址列表
     * </desc>
     *
     * @param mediaId  多媒体Id
     * @return  绑定的地址列表
     * @author LouisLewis
     * @createDate 2017-11-21
     */
    List<DeviceMediaBindAddressVO> getOneMediaGateInfo(@Param("mediaId")String mediaId);


    /**
     * <desc>
     *      分页查询指定的门口机多媒体资源绑定的地址列表
     * </desc>
     *
     * @param params  查询参数
     * @return  绑定的地址列表
     * @author LouisLewis
     * @createDate 2017-11-21
     */
    List<DeviceMediaBindAddressVO> getPageOneMediaGateBindAddressInfos(Map<String,Object> params);

    /**
    * <desc>
    *    删除门口机多媒体资源-与指定地址的关系.
    * </desc>
    *
    * @param deviceMediaRemoveGateBindAddressDTO   需要删除的门口机多媒体资源关联的部分地址关系.
    * @return 受影响的行数
    * @author LewisLouis
    * @createDate 2017-11-23
    */
    Integer removeMediaGateRelation(DeviceMediaRemoveGateBindAddressDTO deviceMediaRemoveGateBindAddressDTO);


    /**
     * <desc>
     *    获取指定门口机多媒体服务信息数量【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-23
     */
    Integer getMediaIdCount(@Param("mediaId")String mediaId);

    /**
     * <desc>
     *     获取所有旧多媒体资源绑定门口机数据
     * </desc>
     *
     * @return 旧多媒体资源绑定门口机数据
     * @author wangzhi
     * @createDate 2018-04-19
     */
    List<DeviceMediaGateForCompatibilityDTO> getOldDeviceMediaGate();

    /**
     * <desc>
     *     使用buildId和unitId获取云对讲设备的deviceUnique
     * </desc>
     *
     * @return 云对讲设备的deviceUnique
     * @author wangzhi
     * @createDate 2018-04-19
     */
    List<String> getAllIntercomDeviceUniqueByAddress(@Param("buildId") String buildId, @Param("unitId") String unitId);

    /**
     * <desc>
     *     删除原来deviceUnique为null的数据
     * </desc>
     *
     * @return 删除的行数
     * @author wangzhi
     * @createDate 2018-04-19
     */
    Integer removeMediaGateByDeviceUniqueNull();

    /**
     * <desc>
     *     查出门口机所有错误数据
     * </desc>
     *
     * @return
     * @author wangzhi
     * @createDate 2018-04-20
     */
    List<DeviceMediaGatePO> getAllWrongGateData();

    /**
     * <desc>
     *     删除门口机所有错误数据
     * </desc>
     *
     * @param gateIds 要删除的门口机主键id集合
     * @return
     * @author wangzhi
     * @createDate 2018-04-20
     */
    Integer removeWrongGateData(@Param("gateIds") List<Integer> gateIds);


}
